package com.ysd.service.impl;

import java.util.ArrayList;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.ysd.entity.Modules;
import com.ysd.repository.ModelesRepository;
import com.ysd.service.ModulesService;
import com.ysd.util.Treemodule;
import com.ysd.util.Treenode;


@Service
public class ModulesServiceImpl implements ModulesService {

	@Autowired
	private ModelesRepository modulesRepository;
	//模块查询树结构
	@Override
	public List<Treemodule> findModulesTree() {
		// TODO Auto-generated method stub
		return this.getModulesTree(modulesRepository.findAll());
	}
	
	public List<Treemodule> getModulesTree(List<Modules> modules){
		// 创建模块集合
		List<Treemodule> tList = new ArrayList<Treemodule>();
		
		// 遍历原模块集合
		for(Modules m:modules) {
			// 如果是父模块，存入模块集合-----父模块ID是0
			if(m.getParent().getId()==0) {
				Treemodule t = new Treemodule();
				t.setTitle(m.getName());
				t.setId(m.getId());
				t.setField(m.getPath());
				List<Treemodule> childrens = this.getChildModules(modules, m);
				if(childrens!=null) {
					t.setChildren(childrens);
				}
				
				tList.add(t);
			}else {
			}
		}
		 
		return tList;
	}
	// 查找子模块方法
	public List<Treemodule> getChildModules(List<Modules> modules,Modules parent){
		// 创建子模块集合
		List<Treemodule> childList = new ArrayList<Treemodule>();
		
		for(Modules m:modules) {
			if(m.getParent().getId()!=0) {
				// 判断是否有子模块
				if(parent.getId().equals(m.getParent().getId())) { 
					Treemodule t = new Treemodule();
					t.setTitle(m.getName());//OK
					t.setId(m.getId());
					t.setField(m.getPath());
					
					List<Treemodule> childrens = this.getChildModules(modules, m);
					if(childrens!=null) {
						t.setChildren(childrens);
					}
					childList.add(t);
				}
				
			}
			
		}
		
		return childList;
	}



	@Override
	public Modules insertOrUpdateModules(Modules modules) {
		// TODO Auto-generated method stub
		return modulesRepository.saveAndFlush(modules);
	}

	@Override
	public Modules findModulesById(Integer id) {
		// TODO Auto-generated method stub
		return modulesRepository.findById(id).get();
	}

	@Override
	public Integer delModulesById(Integer id) {
		// TODO Auto-generated method stub 
		try {
			modulesRepository.deleteById(id);
			return 1;
		} catch (Exception e) {
			// TODO: handle exception
			return 0;
		}
		
	}

	@Override
	public List<Modules> findAllModules() {
		// TODO Auto-generated method stub
		return modulesRepository.findAll();
	}
/** 权限
	 * 获取该用户的所有模块
	 * 
	 * @param modules
	 * @return
	 */
	@Override
	public List<Treemodule> findUserModules(List<Modules> modules) {
		// TODO Auto-generated method stub
		return this.getModulesTree(modules);
	}

//角色模块树
	/**
	 * 获取模块树  用于给角色设置权限
	 */
@Override
public List<Treemodule> getTreefront(List<Modules> modules) {
	List<Treemodule> tList = new ArrayList<Treemodule>();
	for(Modules m:modules) {
		// 如果是父模块，存入模块集合
		if(m.getParent()==null) {
			Treemodule t = new Treemodule();
			t.setTitle(m.getName());
			t.setId(m.getId());
			t.setField(m.getPath());
			List<Treemodule> childrens = this.getChildModules(modules, m);
			System.out.println(childrens);
			if(childrens!=null) {
				t.setChildren(childrens);
			}
			
			tList.add(t);
		}else {
			
		}
	}
	
	return tList;
}

	@Override
	public Treenode getChildrenfront(Treenode treenode, List<Modules> modules) {
		for (int i = 0; i < modules.size(); i++) {
			Modules  module=modules.get(i);
			if(treenode.getId().equals(module.getId())) {
				Treenode  t=new   Treenode();
				t.setId(module.getId());
				t.setTitle(module.getName());
				t.setHref(module.getPath());
				t.setParentid(module.getId());
				if(treenode.getChildren()==null) {
					treenode.setChildren(new ArrayList<Treenode>());
				}
				treenode.getChildren().add(this.getChildrenfront(t, modules));
			}
			
		}
			return treenode;
	}
//
	@Override
	public List<Modules> getTree(List<Modules> modules) {
		// 创建新的功能模块集合
		List<Modules> newModules = new ArrayList<Modules>();
		// 遍历传入的功能模块集合
		for (int i = 0; i < modules.size(); i++) {
			Modules module = modules.get(i);
			
			if (module.getId() == null) {
				
				newModules.add(this.getChildren(module, modules));
			}
		}

		// 返回新的集合
		return newModules;
	}

	@Override
	public Modules getChildren(Modules module, List<Modules> modules) {

		System.out.println("查找children");
		System.out.println("modules.size==>" + modules.size());
		// 遍历全部数据
		for (int i = 0; i < modules.size(); i++) {

			// 当前遍历的功能模块
			Modules item = modules.get(i);
			
			if (module.getId().equals(item.getParent().getId())) {
				
				if (module.getChilder() == null) {
				
					module.setChilder(new ArrayList<Modules>());
				}
				// 将当前的功能模块添加到子集合并继续查找子节点this.getChildren(item, modules)
				module.getChilder().add(item);
			}
		}
		// 返回带有子节点的功能模块
		return module;
	}
	
	
	@Override
	public void saveModulesrole(String rid, Integer mid) {
		// TODO Auto-generated method stub
		modulesRepository.saveModulesrole(rid, mid);
	}
 
	@Override
	public void delModulesrole(String rid) {
		// TODO Auto-generated method stub
		modulesRepository.delModulesrole(rid);
	}
}
